// 通用消息存储模块
import chatHistoryService from '../utils/chatHistoryService.js';

// 消息类型枚举
export const MessageType = {
  SYSTEM: 'system',
  USER: 'user',
  ASSISTANT: 'assistant'
};

// 通用消息存储管理类
export class MessageStorage {
  constructor(prefix, maxHistoryLength = 50) {
    this.prefix = prefix || '';
    this.maxHistoryLength = maxHistoryLength;
    // 使用内存缓存提高性能
    this.cache = {};
  }

  // 为指定ID生成存储键
  _getStorageKey(id) {
    return `${this.prefix}${id}`;
  }

  // 从存储加载指定ID的消息列表（异步）
  async _loadMessages(id) {
    // 如果缓存中有数据，直接返回
    if (this.cache[id]) {
      return this.cache[id];
    }

    try {
      // 使用新的chatHistoryService.getTargetChatContent获取聊天记录
      const result = await chatHistoryService.getChatContent(id);
      
      if (result && result.errCode === 0 && result.data) {
        const chatData = result.data.chatData;
        if (chatData) {
          // 更新缓存
          this.cache[id] = chatData;
          return chatData;
        }
      }
      
      // 没有找到记录，返回空数组
      this.cache[id] = [];
      return [];
    } catch (e) {
      console.error(`加载消息记录异常(${id}):`, e);
      this.cache[id] = [];
      return [];
    }
  }

  // 保存指定ID的消息列表到存储（异步）
  async _saveMessages(id, messages) {
    // 如果消息超过最大长度，只保留最新的消息
    if (messages.length > this.maxHistoryLength) {
      messages = messages.slice(-this.maxHistoryLength);
    }
    
    // 更新缓存
    this.cache[id] = messages;
    
    try {
      // 使用新的chatHistoryService.uploadChatHistory上传聊天记录
      const result = await chatHistoryService.uploadChatHistory(id, messages);
      return result && result.errCode === 0;
    } catch (e) {
      console.error(`保存消息记录异常(${id}):`, e);
      return false;
    }
  }

  // 获取指定ID的消息记录（异步）
  async getMessages(id) {
    return await this._loadMessages(id);
  }

  // 保存指定消息列表（异步）
  async saveMessages(id, messages) {
    return await this._saveMessages(id, messages);
  }

  // 清除指定ID的消息记录（异步）
  async clearMessages(id) {
    if (id) {
      // 清除内存缓存
      delete this.cache[id];
      
      try {
        // 使用新的chatHistoryService.deleteChatHistoryByTarget删除聊天记录
        const result = await chatHistoryService.deleteChatHistory(id);
        return result && result.errCode === 0;
      } catch (e) {
        console.error(`清除消息记录异常(${id}):`, e);
        return false;
      }
    } else {
      console.warn('清除消息时必须指定ID');
      return false;
    }
  }
} 